package com.ruoyi.system.service.impl;

import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.MeterData;
import com.ruoyi.system.mapper.MeterDataMapper;
import com.ruoyi.system.service.IMeterDataService;

/**
 * 电表数据Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-05-20
 */
@Service
public class MeterDataServiceImpl implements IMeterDataService 
{
    private static final Logger log = LoggerFactory.getLogger(MeterDataServiceImpl.class);
    
    @Autowired
    private MeterDataMapper meterDataMapper;

    /**
     * 查询电表数据
     * 
     * @param id 电表数据主键
     * @return 电表数据
     */
    @Override
    public MeterData selectMeterDataById(Long id)
    {
        return meterDataMapper.selectMeterDataById(id);
    }

    /**
     * 查询电表数据列表
     * 
     * @param meterData 电表数据
     * @return 电表数据
     */
    @Override
    public List<MeterData> selectMeterDataList(MeterData meterData)
    {
        return meterDataMapper.selectMeterDataList(meterData);
    }

    /**
     * 新增电表数据
     * 
     * @param meterData 电表数据
     * @return 结果
     */
    @Override
    public int insertMeterData(MeterData meterData)
    {
        meterData.setCreateTime(DateUtils.getNowDate());
        return meterDataMapper.insertMeterData(meterData);
    }

    /**
     * 修改电表数据
     * 
     * @param meterData 电表数据
     * @return 结果
     */
    @Override
    public int updateMeterData(MeterData meterData)
    {
        meterData.setUpdateTime(DateUtils.getNowDate());
        return meterDataMapper.updateMeterData(meterData);
    }

    /**
     * 批量删除电表数据
     * 
     * @param ids 需要删除的电表数据主键
     * @return 结果
     */
    @Override
    public int deleteMeterDataByIds(String ids)
    {
        return meterDataMapper.deleteMeterDataByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除电表数据信息
     * 
     * @param id 电表数据主键
     * @return 结果
     */
    @Override
    public int deleteMeterDataById(Long id)
    {
        return meterDataMapper.deleteMeterDataById(id);
    }
    
    /**
     * 获取指定设备最后一条数据
     * 
     * @param deviceId 设备ID
     * @return 电表数据
     */
    @Override
    public MeterData getLastDataByDeviceId(String deviceId)
    {
        return meterDataMapper.getLastDataByDeviceId(deviceId);
    }
    
    /**
     * 按日统计用电量
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据
     */
    @Override
    public List<Map<String, Object>> statisticsByDay(String startDate, String endDate)
    {
        log.info("执行按日统计SQL，参数：startDate={}, endDate={}", startDate, endDate);
        List<Map<String, Object>> result = meterDataMapper.statisticsByDay(startDate, endDate);
        log.info("按日统计结果：{}", result);
        return result;
    }
    
    /**
     * 按周统计用电量
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据
     */
    @Override
    public List<Map<String, Object>> statisticsByWeek(String startDate, String endDate)
    {
        log.info("执行按周统计SQL，参数：startDate={}, endDate={}", startDate, endDate);
        List<Map<String, Object>> result = meterDataMapper.statisticsByWeek(startDate, endDate);
        log.info("按周统计结果：{}", result);
        return result;
    }
    
    /**
     * 按月统计用电量
     * 
     * @param yearMonth 年月（格式：yyyy-MM）
     * @return 统计数据
     */
    @Override
    public List<Map<String, Object>> statisticsByMonth(String yearMonth)
    {
        log.info("执行按月统计SQL，参数：yearMonth={}", yearMonth);
        List<Map<String, Object>> result = meterDataMapper.statisticsByMonth(yearMonth);
        log.info("按月统计结果：{}", result);
        return result;
    }
    
    /**
     * 按年统计用电量
     * 
     * @param startYear 开始年份
     * @param endYear 结束年份
     * @return 统计数据
     */
    @Override
    public List<Map<String, Object>> statisticsByYear(String startYear, String endYear) {
        return meterDataMapper.statisticsByYear(startYear, endYear);
    }
    
    /**
     * 按小时统计用电量
     * 
     * @param date 日期（格式：yyyy-MM-dd）
     * @return 统计数据
     */
    @Override
    public List<Map<String, Object>> statisticsByHour(String date) {
        log.info("按小时统计用电量，日期：{}，参数：{}", date, date);
        List<Map<String, Object>> result = meterDataMapper.statisticsByHour(date);
        log.info("按小时统计用电量结果：{}", result);
        return result;
    }
}